using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._FeatureClass
{
    /// <summary>
    /// <para>Create Unregistered Feature Class</para>
    /// <para>Creates an empty feature class in a database or enterprise geodatabase. The feature class is not registered with the geodatabase.</para>
    /// <para>在数据库或企业级地理数据库中创建空要素类。要素类未注册到地理数据库中。</para>
    /// </summary>    
    [DisplayName("Create Unregistered Feature Class")]
    public class CreateUnRegisteredFeatureclass : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public CreateUnRegisteredFeatureclass()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_out_path">
        /// <para>Feature Class Location</para>
        /// <para>The enterprise geodatabase or database in which the output feature class will be created.</para>
        /// <para>将在其中创建输出要素类的企业级地理数据库或数据库。</para>
        /// </param>
        /// <param name="_out_name">
        /// <para>Feature Class Name</para>
        /// <para>The name of the feature class to be created.</para>
        /// <para>要创建的要素类的名称。</para>
        /// </param>
        public CreateUnRegisteredFeatureclass(object _out_path, object _out_name)
        {
            this._out_path = _out_path;
            this._out_name = _out_name;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Create Unregistered Feature Class";

        public override string CallName => "management.CreateUnRegisteredFeatureclass";

        public override List<string> AcceptEnvironments => ["configKeyword", "workspace"];

        public override object[] ParameterInfo => [_out_path, _out_name, _geometry_type.GetGPValue(), _template, _has_m.GetGPValue(), _has_z.GetGPValue(), _spatial_reference, _config_keyword, _out_feature_class];

        /// <summary>
        /// <para>Feature Class Location</para>
        /// <para>The enterprise geodatabase or database in which the output feature class will be created.</para>
        /// <para>将在其中创建输出要素类的企业级地理数据库或数据库。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Feature Class Location")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_path { get; set; }


        /// <summary>
        /// <para>Feature Class Name</para>
        /// <para>The name of the feature class to be created.</para>
        /// <para>要创建的要素类的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Feature Class Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_name { get; set; }


        /// <summary>
        /// <para>Geometry Type</para>
        /// <para><xdoc>
        ///   <para>Specifies the geometry type of the feature class. This parameter is only relevant for those geometry types that store dimensionality metadata, such as ST_Geometry in PostgreSQL, PostGIS Geometry, and Oracle SDO_Geometry.</para>
        ///   <bulletList>
        ///     <bullet_item>Point—The geometry type will be point.</bullet_item><para/>
        ///     <bullet_item>Multipoint—The geometry type will be multipoint.</bullet_item><para/>
        ///     <bullet_item>Polyline—The geometry type will be polyline.</bullet_item><para/>
        ///     <bullet_item>Polygon—The geometry type will be polygon. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定要素类的几何类型。此参数仅与存储维度元数据的几何类型相关，例如 PostgreSQL、PostGIS Geometry 和 Oracle SDO_Geometry 中的ST_Geometry。</para>
        ///   <bulletList>
        ///     <bullet_item>点—几何类型将为点。</bullet_item><para/>
        ///     <bullet_item>多点 - 几何类型将为多点。</bullet_item><para/>
        ///     <bullet_item>折线 - 几何类型将为折线。</bullet_item><para/>
        ///     <bullet_item>面—几何类型将为面。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Geometry Type")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _geometry_type_value _geometry_type { get; set; } = _geometry_type_value._POLYGON;

        public enum _geometry_type_value
        {
            /// <summary>
            /// <para>Point</para>
            /// <para>Point—The geometry type will be point.</para>
            /// <para>点—几何类型将为点。</para>
            /// </summary>
            [Description("Point")]
            [GPEnumValue("POINT")]
            _POINT,

            /// <summary>
            /// <para>Multipoint</para>
            /// <para>Multipoint—The geometry type will be multipoint.</para>
            /// <para>多点 - 几何类型将为多点。</para>
            /// </summary>
            [Description("Multipoint")]
            [GPEnumValue("MULTIPOINT")]
            _MULTIPOINT,

            /// <summary>
            /// <para>Polygon</para>
            /// <para>Polygon—The geometry type will be polygon. This is the default.</para>
            /// <para>面—几何类型将为面。这是默认设置。</para>
            /// </summary>
            [Description("Polygon")]
            [GPEnumValue("POLYGON")]
            _POLYGON,

            /// <summary>
            /// <para>Polyline</para>
            /// <para>Polyline—The geometry type will be polyline.</para>
            /// <para>折线 - 几何类型将为折线。</para>
            /// </summary>
            [Description("Polyline")]
            [GPEnumValue("POLYLINE")]
            _POLYLINE,

        }

        /// <summary>
        /// <para>Template Feature Class</para>
        /// <para>An existing feature class or list of feature classes with fields and attribute schema used to defined the fields in the output feature class.</para>
        /// <para>现有要素类或要素类列表，其中包含用于定义输出要素类中的字段和属性方案的字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Template Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _template { get; set; } = null;


        /// <summary>
        /// <para>Has M</para>
        /// <para><xdoc>
        ///   <para>Determines if the output feature class contains linear measurement values (M-values).</para>
        ///   <bulletList>
        ///     <bullet_item>No—The output feature class will not have M-values. This is the default.</bullet_item><para/>
        ///     <bullet_item>Yes—The output feature class will have M-values.</bullet_item><para/>
        ///     <bullet_item>Same as the template feature class—The output feature class will have M-values if the dataset specified in the Template Feature Class parameter (template parameter in Python) has M-values.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>确定输出要素类是否包含线性测量值（M 值）。</para>
        ///   <bulletList>
        ///     <bullet_item>否 - 输出要素类将不具有 M 值。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>是—输出要素类将具有 M 值。</bullet_item><para/>
        ///     <bullet_item>与模板要素类相同 - 如果在模板要素类参数（Python 中的模板参数）中指定的数据集具有 M 值，则输出要素类将具有 M 值。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Has M")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _has_m_value _has_m { get; set; } = _has_m_value._DISABLED;

        public enum _has_m_value
        {
            /// <summary>
            /// <para>No</para>
            /// <para>No—The output feature class will not have M-values. This is the default.</para>
            /// <para>否 - 输出要素类将不具有 M 值。这是默认设置。</para>
            /// </summary>
            [Description("No")]
            [GPEnumValue("DISABLED")]
            _DISABLED,

            /// <summary>
            /// <para>Same as the template feature class</para>
            /// <para>Same as the template feature class—The output feature class will have M-values if the dataset specified in the Template Feature Class parameter (template parameter in Python) has M-values.</para>
            /// <para>与模板要素类相同 - 如果在模板要素类参数（Python 中的模板参数）中指定的数据集具有 M 值，则输出要素类将具有 M 值。</para>
            /// </summary>
            [Description("Same as the template feature class")]
            [GPEnumValue("SAME_AS_TEMPLATE")]
            _SAME_AS_TEMPLATE,

            /// <summary>
            /// <para>Yes</para>
            /// <para>Yes—The output feature class will have M-values.</para>
            /// <para>是—输出要素类将具有 M 值。</para>
            /// </summary>
            [Description("Yes")]
            [GPEnumValue("ENABLED")]
            _ENABLED,

        }

        /// <summary>
        /// <para>Has Z</para>
        /// <para><xdoc>
        ///   <para>Determines if the output feature class contains elevation values (Z-values).</para>
        ///   <bulletList>
        ///     <bullet_item>No—The output feature class will not have Z-values. This is the default.</bullet_item><para/>
        ///     <bullet_item>Yes—The output feature class will have Z-values.</bullet_item><para/>
        ///     <bullet_item>Same as the template feature class—The output feature class will have Z-values if the dataset specified in the Template Feature Class parameter (template parameter in Python) has Z-values.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>确定输出要素类是否包含高程值（Z 值）。</para>
        ///   <bulletList>
        ///     <bullet_item>否 - 输出要素类将不具有 Z 值。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>是—输出要素类将具有 Z 值。</bullet_item><para/>
        ///     <bullet_item>与模板要素类相同 - 如果在模板要素类参数（Python 中的模板参数）中指定的数据集具有 Z 值，则输出要素类将具有 Z 值。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Has Z")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _has_z_value _has_z { get; set; } = _has_z_value._DISABLED;

        public enum _has_z_value
        {
            /// <summary>
            /// <para>No</para>
            /// <para>No—The output feature class will not have Z-values. This is the default.</para>
            /// <para>否 - 输出要素类将不具有 Z 值。这是默认设置。</para>
            /// </summary>
            [Description("No")]
            [GPEnumValue("DISABLED")]
            _DISABLED,

            /// <summary>
            /// <para>Same as the template feature class</para>
            /// <para>Same as the template feature class—The output feature class will have Z-values if the dataset specified in the Template Feature Class parameter (template parameter in Python) has Z-values.</para>
            /// <para>与模板要素类相同 - 如果在模板要素类参数（Python 中的模板参数）中指定的数据集具有 Z 值，则输出要素类将具有 Z 值。</para>
            /// </summary>
            [Description("Same as the template feature class")]
            [GPEnumValue("SAME_AS_TEMPLATE")]
            _SAME_AS_TEMPLATE,

            /// <summary>
            /// <para>Yes</para>
            /// <para>Yes—The output feature class will have Z-values.</para>
            /// <para>是—输出要素类将具有 Z 值。</para>
            /// </summary>
            [Description("Yes")]
            [GPEnumValue("ENABLED")]
            _ENABLED,

        }

        /// <summary>
        /// <para>Spatial Reference</para>
        /// <para>The spatial reference of the output feature dataset. On the Spatial Reference Properties dialog box, you can select, import, or create a new coordinate system. To set aspects of the spatial reference, such as the x,y-, z-, or m-domain, resolution, or tolerance, use the Environments dialog box.</para>
        /// <para>输出要素数据集的空间参考。在空间参考属性对话框中，可以选择、导入或创建新的坐标系。要设置空间参考的各个方面，例如 x、y、z 或 m 属性域、分辨率或容差，请使用“环境”对话框。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Spatial Reference")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _spatial_reference { get; set; } = null;


        /// <summary>
        /// <para>Configuration Keyword</para>
        /// <para><xdoc>
        ///   <para>Specifies the default storage parameters (configurations) for geodatabases in a relational database management system (RDBMS). This setting is applicable only when using enterprise geodatabase tables.</para>
        ///   <para>Configuration keywords are set by the database administrator.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定关系数据库管理系统 （RDBMS） 中地理数据库的默认存储参数（配置）。此设置仅在使用企业级地理数据库表时适用。</para>
        ///   <para>配置关键字由数据库管理员设置。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Configuration Keyword")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _config_keyword { get; set; } = null;


        /// <summary>
        /// <para>Output Feature Class</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_feature_class { get; set; }


        public CreateUnRegisteredFeatureclass SetEnv(object configKeyword = null, object workspace = null)
        {
            base.SetEnv(configKeyword: configKeyword, workspace: workspace);
            return this;
        }

    }

}